feat(appkit): Agent Skills v1 — SKILL.md progressive disclosure + demo (#532) - #544
Merged
Conversation
SDK half of #532 (split 1/2). Skills engine (parse/load/resolve/render/read), agent-definition skills: wiring, agents-plugin integration (load_skill + read_skill_file tools, catalog resolution, clientConfig), the appkit-ui useAgentChat /skill surface, and docs. Playground/template fixtures follow in 2/2. Signed-off-by: MarioCadenas <MarioCadenas@users.noreply.github.com>
MarioCadenas
requested review from
atilafassina
and removed request for
a team
August 21, 2026 10:56
template/appkit.plugins.json is generated from the plugin manifests; it must travel with the agents manifest.json change (skills volume resource) or CI's sync:template check fails. Was mis-bucketed into the 2/2 fixtures PR. Signed-off-by: MarioCadenas <MarioCadenas@users.noreply.github.com>
Review follow-ups on #543: - parallelize UC-volume skill reads (network-bound) via Promise.all; per-skill failures still skip individually and sorted order is preserved - extract the useAgentChat slash-command parse into a named resolveSkill helper (appkit-ui) - delete 18 stale biome-ignore comments — post-oxlint migration, and no-explicit-any is off in .oxlintrc.json, so they suppressed nothing Signed-off-by: MarioCadenas <MarioCadenas@users.noreply.github.com>
Playground/template half of #532 (split 2/2), stacked on the SDK PR (1/2). Demo skills exercising every source/case: global bullet-brief (+ helper opt-in), per-agent query/skills/routing-brief, the agent:haiku/bundle:haiku collision, and the template tracer-bullets skill. Auto-retargets to main once 1/2 merges. Signed-off-by: MarioCadenas <MarioCadenas@users.noreply.github.com>
MarioCadenas
force-pushed
the
split/532/fixtures-docs
branch
from
August 21, 2026 13:55
14b6f9a to
7f79209
Compare
react/exhaustive-deps is off in .oxlintrc.json and oxlint doesn't parse biome directives, so these two suppressions were inert post-migration. Signed-off-by: MarioCadenas <MarioCadenas@users.noreply.github.com>
This was referenced Aug 21, 2026
Collaborator
Author
The leading-/token sugar in useAgentChat stripped any /word off the message and sent it as a skill, so ordinary messages like '/tmp is full' or '/usr/bin/python needs upgrading' were mangled into a bogus skill with the first word cut out. Parse the leading token as a skill only when it matches a name in the agent's skill catalog; otherwise send the message verbatim. useAgentChat gains an optional 'skills' option (the known names); the template passes its catalog through, and the playground route applies the same guard to its inline parser. Signed-off-by: MarioCadenas <MarioCadenas@users.noreply.github.com>
atilafassina
approved these changes
Aug 31, 2026
MarioCadenas
enabled auto-merge (squash)
August 31, 2026 09:27
Contributor
📦 Bundle size reportCompared against
|
| dist | raw | gzip |
|---|---|---|
| JS (runtime) | 1.0 MB (+24 KB) | 360 KB (+8.9 KB) |
| Type declarations | 385 KB (+6.4 KB) | 136 KB (+2.5 KB) |
| Source maps | 2.0 MB (+43 KB) | 676 KB (+15 KB) |
| Other | 11 KB | 3.7 KB |
| Total | 3.4 MB (+73 KB) | 1.1 MB (+26 KB) |
Per-entry composition (own code — deps external (as shipped))
| Entry | Initial (gz) | Lazy (gz) | Total (gz) | node_modules (min) | Own code (min) |
|---|---|---|---|---|---|
. |
95 KB | 2.5 KB | 97 KB | external | 311 KB |
./beta |
70 KB (+5.6 KB) | 457 B | 71 KB (+5.6 KB) | external | 212 KB (+16 KB) |
./testing |
17 KB | 0 B | 17 KB | external | 50 KB |
./tsdown |
520 B | 0 B | 520 B | external | 813 B |
./type-generator |
22 KB | 0 B | 22 KB | external | 65 KB |
Chunks:
| Entry | Chunk | Load | Size (gz) |
|---|---|---|---|
. |
index.js |
initial | 91 KB |
. |
utils.js |
initial | 4.0 KB |
. |
remote-tunnel-manager.js |
lazy | 2.5 KB |
./beta |
beta.js |
initial | 54 KB |
./beta |
stream-manager.js |
initial | 5.8 KB |
./beta |
wide-event-emitter.js |
initial | 3.2 KB |
./beta |
databricks.js |
initial | 3.0 KB |
./beta |
configuration.js |
initial | 2.1 KB |
./beta |
service-context.js |
initial | 1.3 KB |
./beta |
client.js |
initial | 434 B |
./beta |
client-options.js |
initial | 220 B |
./beta |
supervisor-api.js |
lazy | 192 B |
./beta |
databricks.js |
lazy | 142 B |
./beta |
index.js |
lazy | 123 B |
./testing |
index.js |
initial | 17 KB |
./tsdown |
index.js |
initial | 520 B |
./type-generator |
index.js |
initial | 22 KB |
@databricks/appkit-ui
npm tarball (packed): 350 KB (+1.8 KB) — gzipped download (dist + bin; excludes release-only docs/NOTICE).
| dist | raw | gzip |
|---|---|---|
| JS (runtime) | 395 KB (+897 B) | 132 KB (+410 B) |
| Type declarations | 229 KB (+917 B) | 84 KB (+416 B) |
| Source maps | 766 KB (+2.7 KB) | 253 KB (+1.0 KB) |
| CSS | 16 KB | 3.2 KB |
| Total | 1.4 MB (+4.5 KB) | 473 KB (+1.9 KB) |
Per-entry composition (consumer bundle — deps bundled, peerDeps external)
| Entry | Initial (gz) | Lazy (gz) | Total (gz) | node_modules (min) | Own code (min) |
|---|---|---|---|---|---|
./js |
5.3 KB | 49 KB | 55 KB | 208 KB | 14 KB |
./js/beta |
20 B | 0 B | 20 B | 0 B | 0 B |
./react |
432 KB (+214 B) | 49 KB | 481 KB (+214 B) | 1.3 MB | 177 KB (+323 B) |
./react/beta |
1.0 KB | 0 B | 1.0 KB | 0 B | 1.9 KB |
Chunks:
| Entry | Chunk | Load | Size (gz) |
|---|---|---|---|
./js |
index.js |
initial | 5.2 KB |
./js |
chunk |
initial | 120 B |
./js |
apache-arrow |
lazy | 49 KB |
./js/beta |
beta.js |
initial | 20 B |
./react |
index.js |
initial | 430 KB |
./react |
tslib |
initial | 2.1 KB |
./react |
apache-arrow |
lazy | 49 KB |
./react/beta |
beta.js |
initial | 1.0 KB |
Contributor
🤖 AppKit PR bot🔬 Run evalsStart an eval for this PR from the evals-monitor app: Go to Evals Monitor → 📦 Try this PR's app templateScaffolds a new app from this PR's SDK build. Run it in any folder (requires the GitHub CLI — gh run download 33377604341 -R databricks/appkit -n appkit-template-0.66.1-pr.25f9c2c-split-532-fixtures-docs-544 -D appkit-pr-544 \
&& unzip -o "appkit-pr-544/appkit-template-0.66.1-pr.25f9c2c-split-532-fixtures-docs-544.zip" -d "appkit-pr-544" \
&& databricks apps init --template "appkit-pr-544"The template pins |
MarioCadenas
disabled auto-merge
August 31, 2026 09:35
MarioCadenas
added a commit
that referenced
this pull request
Aug 31, 2026
Signed-off-by: MarioCadenas <MarioCadenas@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Playground/template half of #532 (Agent Skills v1), split 2 of 2. Stacked on #543.
Demo skills exercising every source and case:
skills/bullet-brief(helper opts in → multi-entry menu on a code agent)query/skills/routing-brief(+ bundledreference.md,allowed-tools)query/skills/haikuvs globalhaiku→agent:haiku/bundle:haikutracer-bulletsskill + planner opt-in/agentpage picker gainsqueryso its skills surface in the inputMerge order
Depends on #543 (2/2). Base is
split/532/sdk-feature; GitHub auto-retargets this tomainonce #543 merges.14 files:
apps/dev-playground/*+template/*.